<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>

<link href='https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color: #ffffff; --text-color: #333333; --select-text-bg-color: #B5D6FC; --select-text-font-color: auto; --monospace: "Lucida Console",Consolas,"Courier",monospace; --title-bar-height: 20px; }
.mac-os-11 { --title-bar-height: 28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
h1, h2, h3, h4, h5 { white-space: pre-wrap; }
body { margin: 0px; padding: 0px; height: auto; inset: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
thead, tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-fences-adv-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
svg { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; border-color: transparent !important; padding-top: 0px !important; padding-bottom: 0px !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
  #write > p:nth-child(1) { margin-top: 0px; }
  .typora-export-show-outline .typora-export-sidebar { display: none; }
  figure { overflow-x: visible; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.reversefootnote { font-family: ui-monospace, sans-serif; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.6; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
.md-expand mark .md-meta { opacity: 0.3 !important; }
mark .md-meta { color: rgb(0, 0, 0); }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-fences.md-fences-math { font-size: 1em; }
.md-fences-advanced:not(.md-focus) { padding: 0px; white-space: nowrap; border: 0px; }
.md-fences-advanced:not(.md-focus) { background: inherit; }
.typora-export-show-outline .typora-export-content { max-width: 1440px; margin: auto; display: flex; flex-direction: row; }
.typora-export-sidebar { width: 300px; font-size: 0.8rem; margin-top: 80px; margin-right: 18px; }
.typora-export-show-outline #write { --webkit-flex: 2; flex: 2 1 0%; }
.typora-export-sidebar .outline-content { position: fixed; top: 0px; max-height: 100%; overflow: hidden auto; padding-bottom: 30px; padding-top: 60px; width: 300px; }
@media screen and (max-width: 1024px) {
  .typora-export-sidebar, .typora-export-sidebar .outline-content { width: 240px; }
}
@media screen and (max-width: 800px) {
  .typora-export-sidebar { display: none; }
}
.outline-content li, .outline-content ul { margin-left: 0px; margin-right: 0px; padding-left: 0px; padding-right: 0px; list-style: none; overflow-wrap: anywhere; }
.outline-content ul { margin-top: 0px; margin-bottom: 0px; }
.outline-content strong { font-weight: 400; }
.outline-expander { width: 1rem; height: 1.42857rem; position: relative; display: table-cell; vertical-align: middle; cursor: pointer; padding-left: 4px; }
.outline-expander::before { content: ""; position: relative; font-family: Ionicons; display: inline-block; font-size: 8px; vertical-align: middle; }
.outline-item { padding-top: 3px; padding-bottom: 3px; cursor: pointer; }
.outline-expander:hover::before { content: ""; }
.outline-h1 > .outline-item { padding-left: 0px; }
.outline-h2 > .outline-item { padding-left: 1em; }
.outline-h3 > .outline-item { padding-left: 2em; }
.outline-h4 > .outline-item { padding-left: 3em; }
.outline-h5 > .outline-item { padding-left: 4em; }
.outline-h6 > .outline-item { padding-left: 5em; }
.outline-label { cursor: pointer; display: table-cell; vertical-align: middle; text-decoration: none; color: inherit; }
.outline-label:hover { text-decoration: underline; }
.outline-item:hover { border-color: rgb(245, 245, 245); background-color: var(--item-hover-bg-color); }
.outline-item:hover { margin-left: -28px; margin-right: -28px; border-left: 28px solid transparent; border-right: 28px solid transparent; }
.outline-item-single .outline-expander::before, .outline-item-single .outline-expander:hover::before { display: none; }
.outline-item-open > .outline-item > .outline-expander::before { content: ""; }
.outline-children { display: none; }
.info-panel-tab-wrapper { display: none; }
.outline-item-open > .outline-children { display: block; }
.typora-export .outline-item { padding-top: 1px; padding-bottom: 1px; }
.typora-export .outline-item:hover { margin-right: -8px; border-right: 8px solid transparent; }
.typora-export .outline-expander::before { content: "+"; font-family: inherit; top: -1px; }
.typora-export .outline-expander:hover::before, .typora-export .outline-item-open > .outline-item > .outline-expander::before { content: "−"; }
.typora-export-collapse-outline .outline-children { display: none; }
.typora-export-collapse-outline .outline-item-open > .outline-children, .typora-export-no-collapse-outline .outline-children { display: block; }
.typora-export-no-collapse-outline .outline-expander::before { content: "" !important; }
.typora-export-show-outline .outline-item-active > .outline-item .outline-label { font-weight: 700; }
.md-inline-math-container mjx-container { zoom: 0.95; }
mjx-container { break-inside: avoid; }
.md-alert.md-alert-note { border-left-color: rgb(9, 105, 218); }
.md-alert.md-alert-important { border-left-color: rgb(130, 80, 223); }
.md-alert.md-alert-warning { border-left-color: rgb(154, 103, 0); }
.md-alert.md-alert-tip { border-left-color: rgb(31, 136, 61); }
.md-alert.md-alert-caution { border-left-color: rgb(207, 34, 46); }
.md-alert { padding: 0px 1em; margin-bottom: 16px; color: inherit; border-left: 0.25em solid rgb(0, 0, 0); }
.md-alert-text-note { color: rgb(9, 105, 218); }
.md-alert-text-important { color: rgb(130, 80, 223); }
.md-alert-text-warning { color: rgb(154, 103, 0); }
.md-alert-text-tip { color: rgb(31, 136, 61); }
.md-alert-text-caution { color: rgb(207, 34, 46); }
.md-alert-text { font-size: 0.9rem; font-weight: 700; }
.md-alert-text svg { fill: currentcolor; position: relative; top: 0.125em; margin-right: 1ch; overflow: visible; }
.md-alert-text-container::after { content: attr(data-text); text-transform: capitalize; pointer-events: none; margin-right: 1ch; }


.CodeMirror { height: auto; }
.CodeMirror.cm-s-inner { background: inherit; }
.CodeMirror-scroll { overflow: auto hidden; z-index: 3; }
.CodeMirror-gutter-filler, .CodeMirror-scrollbar-filler { background-color: rgb(255, 255, 255); }
.CodeMirror-gutters { border-right: 1px solid rgb(221, 221, 221); background: inherit; white-space: nowrap; }
.CodeMirror-linenumber { padding: 0px 3px 0px 5px; text-align: right; color: rgb(153, 153, 153); }
.cm-s-inner .cm-keyword { color: rgb(119, 0, 136); }
.cm-s-inner .cm-atom, .cm-s-inner.cm-atom { color: rgb(34, 17, 153); }
.cm-s-inner .cm-number { color: rgb(17, 102, 68); }
.cm-s-inner .cm-def { color: rgb(0, 0, 255); }
.cm-s-inner .cm-variable { color: rgb(0, 0, 0); }
.cm-s-inner .cm-variable-2 { color: rgb(0, 85, 170); }
.cm-s-inner .cm-variable-3 { color: rgb(0, 136, 85); }
.cm-s-inner .cm-string { color: rgb(170, 17, 17); }
.cm-s-inner .cm-property { color: rgb(0, 0, 0); }
.cm-s-inner .cm-operator { color: rgb(152, 26, 26); }
.cm-s-inner .cm-comment, .cm-s-inner.cm-comment { color: rgb(170, 85, 0); }
.cm-s-inner .cm-string-2 { color: rgb(255, 85, 0); }
.cm-s-inner .cm-meta { color: rgb(85, 85, 85); }
.cm-s-inner .cm-qualifier { color: rgb(85, 85, 85); }
.cm-s-inner .cm-builtin { color: rgb(51, 0, 170); }
.cm-s-inner .cm-bracket { color: rgb(153, 153, 119); }
.cm-s-inner .cm-tag { color: rgb(17, 119, 0); }
.cm-s-inner .cm-attribute { color: rgb(0, 0, 204); }
.cm-s-inner .cm-header, .cm-s-inner.cm-header { color: rgb(0, 0, 255); }
.cm-s-inner .cm-quote, .cm-s-inner.cm-quote { color: rgb(0, 153, 0); }
.cm-s-inner .cm-hr, .cm-s-inner.cm-hr { color: rgb(153, 153, 153); }
.cm-s-inner .cm-link, .cm-s-inner.cm-link { color: rgb(0, 0, 204); }
.cm-negative { color: rgb(221, 68, 68); }
.cm-positive { color: rgb(34, 153, 34); }
.cm-header, .cm-strong { font-weight: 700; }
.cm-del { text-decoration: line-through; }
.cm-em { font-style: italic; }
.cm-link { text-decoration: underline; }
.cm-error { color: red; }
.cm-invalidchar { color: red; }
.cm-constant { color: rgb(38, 139, 210); }
.cm-defined { color: rgb(181, 137, 0); }
div.CodeMirror span.CodeMirror-matchingbracket { color: rgb(0, 255, 0); }
div.CodeMirror span.CodeMirror-nonmatchingbracket { color: rgb(255, 34, 34); }
.cm-s-inner .CodeMirror-activeline-background { background: inherit; }
.CodeMirror { position: relative; overflow: hidden; }
.CodeMirror-scroll { height: 100%; outline: 0px; position: relative; box-sizing: content-box; background: inherit; }
.CodeMirror-sizer { position: relative; }
.CodeMirror-gutter-filler, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-vscrollbar { position: absolute; z-index: 6; display: none; outline: 0px; }
.CodeMirror-vscrollbar { right: 0px; top: 0px; overflow: hidden; }
.CodeMirror-hscrollbar { bottom: 0px; left: 0px; overflow: auto hidden; }
.CodeMirror-scrollbar-filler { right: 0px; bottom: 0px; }
.CodeMirror-gutter-filler { left: 0px; bottom: 0px; }
.CodeMirror-gutters { position: absolute; left: 0px; top: 0px; padding-bottom: 10px; z-index: 3; overflow-y: hidden; }
.CodeMirror-gutter { white-space: normal; height: 100%; box-sizing: content-box; padding-bottom: 30px; margin-bottom: -32px; display: inline-block; }
.CodeMirror-gutter-wrapper { position: absolute; z-index: 4; background: 0px 0px !important; border: none !important; }
.CodeMirror-gutter-background { position: absolute; top: 0px; bottom: 0px; z-index: 4; }
.CodeMirror-gutter-elt { position: absolute; cursor: default; z-index: 4; }
.CodeMirror-lines { cursor: text; }
.CodeMirror pre { border-radius: 0px; border-width: 0px; background: 0px 0px; font-family: inherit; font-size: inherit; margin: 0px; white-space: pre; overflow-wrap: normal; color: inherit; z-index: 2; position: relative; overflow: visible; }
.CodeMirror-wrap pre { overflow-wrap: break-word; white-space: pre-wrap; word-break: normal; }
.CodeMirror-code pre { border-right: 30px solid transparent; width: fit-content; }
.CodeMirror-wrap .CodeMirror-code pre { border-right: none; width: auto; }
.CodeMirror-linebackground { position: absolute; inset: 0px; z-index: 0; }
.CodeMirror-linewidget { position: relative; z-index: 2; overflow: auto; }
.CodeMirror-wrap .CodeMirror-scroll { overflow-x: hidden; }
.CodeMirror-measure { position: absolute; width: 100%; height: 0px; overflow: hidden; visibility: hidden; }
.CodeMirror-measure pre { position: static; }
.CodeMirror div.CodeMirror-cursor { position: absolute; visibility: hidden; border-right: none; width: 0px; }
.CodeMirror div.CodeMirror-cursor { visibility: hidden; }
.CodeMirror-focused div.CodeMirror-cursor { visibility: inherit; }
.cm-searching { background: rgba(255, 255, 0, 0.4); }
span.cm-underlined { text-decoration: underline; }
span.cm-strikethrough { text-decoration: line-through; }
.cm-tw-syntaxerror { color: rgb(255, 255, 255); background-color: rgb(153, 0, 0); }
.cm-tw-deleted { text-decoration: line-through; }
.cm-tw-header5 { font-weight: 700; }
.cm-tw-listitem:first-child { padding-left: 10px; }
.cm-tw-box { border-style: solid; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-color: inherit; border-top-width: 0px !important; }
.cm-tw-underline { text-decoration: underline; }
@media print {
  .CodeMirror div.CodeMirror-cursor { visibility: hidden; }
}


:root {
    --side-bar-bg-color: #fafafa;
    --control-text-color: #777;
}

@include-when-export url(https://fonts.googleapis.com/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

/* open-sans-regular - latin-ext_latin */
  /* open-sans-italic - latin-ext_latin */
    /* open-sans-700 - latin-ext_latin */
    /* open-sans-700italic - latin-ext_latin */
  html {
    font-size: 16px;
    -webkit-font-smoothing: antialiased;
}

body {
    font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, 'Segoe UI Emoji', sans-serif;
    color: rgb(51, 51, 51);
    line-height: 1.6;
}

#write {
    max-width: 860px;
  	margin: 0 auto;
  	padding: 30px;
    padding-bottom: 100px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}

#write > ul:first-child,
#write > ol:first-child{
    margin-top: 30px;
}

a {
    color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}
h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}
h1 {
    font-size: 2.25em;
    line-height: 1.2;
    border-bottom: 1px solid #eee;
}
h2 {
    font-size: 1.75em;
    line-height: 1.225;
    border-bottom: 1px solid #eee;
}

/*@media print {
    .typora-export h1,
    .typora-export h2 {
        border-bottom: none;
        padding-bottom: initial;
    }

    .typora-export h1::after,
    .typora-export h2::after {
        content: "";
        display: block;
        height: 100px;
        margin-top: -96px;
        border-top: 1px solid #eee;
    }
}*/

h3 {
    font-size: 1.5em;
    line-height: 1.43;
}
h4 {
    font-size: 1.25em;
}
h5 {
    font-size: 1em;
}
h6 {
   font-size: 1em;
    color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
    margin: 0.8em 0;
}
li>ol,
li>ul {
    margin: 0 0;
}
hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

li p.first {
    display: inline-block;
}
ul,
ol {
    padding-left: 30px;
}
ul:first-child,
ol:first-child {
    margin-top: 0;
}
ul:last-child,
ol:last-child {
    margin-bottom: 0;
}
blockquote {
    border-left: 4px solid #dfe2e5;
    padding: 0 15px;
    color: #777777;
}
blockquote blockquote {
    padding-right: 0;
}
table {
    padding: 0;
    word-break: initial;
}
table tr {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}
table tr:nth-child(2n),
thead {
    background-color: #f8f8f8;
}
table th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table td {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 6px 13px;
}
table th:first-child,
table td:first-child {
    margin-top: 0;
}
table th:last-child,
table td:last-child {
    margin-bottom: 0;
}

.CodeMirror-lines {
    padding-left: 4px;
}

.code-tooltip {
    box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
    border-top: 1px solid #eef2f2;
}

.md-fences,
code,
tt {
    border: 1px solid #e7eaed;
    background-color: #f8f8f8;
    border-radius: 3px;
    padding: 0;
    padding: 2px 4px 0px 4px;
    font-size: 0.9em;
}

code {
    background-color: #f3f4f4;
    padding: 0 2px 0 2px;
}

.md-fences {
    margin-bottom: 15px;
    margin-top: 15px;
    padding-top: 8px;
    padding-bottom: 6px;
}


.md-task-list-item > input {
  margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }
    pre {
        page-break-inside: avoid;
        word-wrap: break-word;
    }
}

.md-fences {
	background-color: #f8f8f8;
}
#write pre.md-meta-block {
	padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
	bottom: .375rem;
}

.md-mathjax-midline {
    background: #fafafa;
}

#write>h3.md-focus:before{
	left: -1.5625rem;
	top: .375rem;
}
#write>h4.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h5.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h6.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
.md-image>.md-meta {
    /*border: 1px solid #ddd;*/
    border-radius: 3px;
    padding: 2px 0px 0px 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: #a7a7a7;
    opacity: 1;
}

.md-toc { 
    margin-top:20px;
    padding-bottom:20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header, .context-menu, .megamenu-content, footer{
    font-family: "Segoe UI", "Arial", sans-serif;
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: #fafafa;
    background-color: var(--side-bar-bg-color);
}

.mac-os #write{
    caret-color: AccentColor;
}

.md-lang {
    color: #b4654d;
}

/*.html-for-mac {
    --item-hover-bg-color: #E6F0FE;
}*/

#md-notification .btn {
    border: 0;
}

.dropdown-menu .divider {
    border-color: #e5e5e5;
    opacity: 0.4;
}

.ty-preferences .window-content {
    background-color: #fafafa;
}

.ty-preferences .nav-group-item.active {
    color: white;
    background: #999;
}

.menu-item-container a.menu-style-btn {
    background-color: #f5f8fa;
    background-image: linear-gradient( 180deg , hsla(0, 0%, 100%, 0.8), hsla(0, 0%, 100%, 0)); 
}


 body {font-variant-ligatures: no-common-ligatures;} 
        :root { --count-content-h1: "";
--count-content-h2: counter(content-h2, decimal) ". ";
--count-content-h3: counter(content-h2, decimal) "." counter(content-h3, decimal) " ";
--count-content-h4: counter(content-h2, decimal) "." counter(content-h3, decimal) "." counter(content-h4, decimal) " ";
--count-content-h5: counter(content-h2, decimal) "." counter(content-h3, decimal) "." counter(content-h4, decimal) "." counter(content-h5, decimal) " ";
--count-content-h6: counter(content-h2, decimal) "." counter(content-h3, decimal) "." counter(content-h4, decimal) "." counter(content-h5, decimal) "." counter(content-h6, decimal) " ";
--count-outline-h1: "";
--count-outline-h2: counter(outline-h2, decimal) ". ";
--count-outline-h3: counter(outline-h2, decimal) "." counter(outline-h3, decimal) " ";
--count-outline-h4: counter(outline-h2, decimal) "." counter(outline-h3, decimal) "." counter(outline-h4, decimal) " ";
--count-outline-h5: counter(outline-h2, decimal) "." counter(outline-h3, decimal) "." counter(outline-h4, decimal) "." counter(outline-h5, decimal) " ";
--count-outline-h6: counter(outline-h2, decimal) "." counter(outline-h3, decimal) "." counter(outline-h4, decimal) "." counter(outline-h5, decimal) "." counter(outline-h6, decimal) " ";
--count-toc-h1: "";
--count-toc-h2: counter(toc-h2, decimal) ". ";
--count-toc-h3: counter(toc-h2, decimal) "." counter(toc-h3, decimal) " ";
--count-toc-h4: counter(toc-h2, decimal) "." counter(toc-h3, decimal) "." counter(toc-h4, decimal) " ";
--count-toc-h5: counter(toc-h2, decimal) "." counter(toc-h3, decimal) "." counter(toc-h4, decimal) "." counter(toc-h5, decimal) " ";
--count-toc-h6: counter(toc-h2, decimal) "." counter(toc-h3, decimal) "." counter(toc-h4, decimal) "." counter(toc-h5, decimal) "." counter(toc-h6, decimal) " ";
--count-table: "Table " counter(table, decimal);
--count-image: "Image " counter(image, decimal) " " attr(data-alt);
--count-fence: "Fence " counter(fence, decimal); }
        #write { counter-reset: content-h1 content-h2 image table fence; }
        #write > h1 { counter-set: content-h2; }
        #write > h2 { counter-set: content-h3; }
        #write > h3 { counter-set: content-h4; }
        #write > h4 { counter-set: content-h5; }
        #write > h5 { counter-set: content-h6; }
        

        #write > h1:before,
        #write > h1.md-focus.md-heading:before {
            counter-increment: content-h1;
            content: var(--count-content-h1);
        }
        
        #write > h2:before,
        #write > h2.md-focus.md-heading:before {
            counter-increment: content-h2;
            content: var(--count-content-h2);
        }
        
        #write > h3:before,
        #write > h3.md-focus.md-heading:before {
            counter-increment: content-h3;
            content: var(--count-content-h3);
        }
        
        #write > h4:before,
        #write > h4.md-focus.md-heading:before {
            counter-increment: content-h4;
            content: var(--count-content-h4);
        }
        
        #write > h5:before,
        #write > h5.md-focus.md-heading:before {
            counter-increment: content-h5;
            content: var(--count-content-h5);
        }
        
        #write > h6:before,
        #write > h6.md-focus.md-heading:before {
            counter-increment: content-h6;
            content: var(--count-content-h6);
        }
        
        #write > h3.md-focus:before,
        #write > h4.md-focus:before,
        #write > h5.md-focus:before,
        #write > h6.md-focus:before,
        h3.md-focus:before,
        h4.md-focus:before,
        h5.md-focus:before,
        h6.md-focus:before {
            color: inherit;
            border: inherit;
            border-radius: inherit;
            position: inherit;
            left: initial;
            float: none;
            top: initial;
            font-size: inherit;
            padding-left: inherit;
            padding-right: inherit;
            vertical-align: inherit;
            font-weight: inherit;
            line-height: inherit;
            visibility: inherit;
        }

        .outline-content { counter-reset: outline-h1 outline-h2; }
        .outline-h1 { counter-set: outline-h2; }
        .outline-h2 { counter-set: outline-h3; }
        .outline-h3 { counter-set: outline-h4; }
        .outline-h4 { counter-set: outline-h5; }
        .outline-h5 { counter-set: outline-h6; }
        
        .outline-content .outline-h1 .outline-label:before {
            counter-increment: outline-h1;
            content: var(--count-outline-h1);
        }
        
        .outline-content .outline-h2 .outline-label:before {
            counter-increment: outline-h2;
            content: var(--count-outline-h2);
        }
        
        .outline-content .outline-h3 .outline-label:before {
            counter-increment: outline-h3;
            content: var(--count-outline-h3);
        }
        
        .outline-content .outline-h4 .outline-label:before {
            counter-increment: outline-h4;
            content: var(--count-outline-h4);
        }
        
        .outline-content .outline-h5 .outline-label:before {
            counter-increment: outline-h5;
            content: var(--count-outline-h5);
        }
        
        .outline-content .outline-h6 .outline-label:before {
            counter-increment: outline-h6;
            content: var(--count-outline-h6);
        }
</style><title>OS18.【Linux】进程基础知识(2)</title>
</head>
<body class='typora-export os-windows'><div class='typora-export-content'>
<div id='write'  class=''><p><strong><span>目录</span></strong></p><p><a href='#1.ps%20ajx%E5%91%BD%E4%BB%A4%E6%98%AF%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PID%E7%9A%84'><span>1.ps ajx命令是如何获取PID的</span></a></p><p><a href='#2.%E5%AE%9E%E9%AA%8C%3A%E7%BC%96%E5%86%99%E4%BB%A3%E7%A0%81%2C%E9%80%9A%E8%BF%87%E7%B3%BB%E7%BB%9F%E8%B0%83%E7%94%A8%E6%9D%A5%E8%8E%B7%E5%8F%96PID'><span>2.实验:编写代码,通过系统调用来获取PID</span></a></p><p><a href='#pid_t%E7%B1%BB%E5%9E%8B%E7%9A%84%E6%9C%AC%E8%B4%A8'><span>pid_t类型的本质</span></a></p><p><a href='#strace%E5%91%BD%E4%BB%A4'><span>strace命令</span></a></p><p><a href='#3ppid'><span>3.PPID</span></a></p><p><a href='#%E7%88%B6%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%AD%90%E8%BF%9B%E7%A8%8B'><span>父进程和子进程</span></a></p><p><a href='#ppid'><span>PPID</span></a></p><p><a href='#%E7%BB%93%E8%AE%BA'><span>结论</span></a></p><p><a href='#4.%E4%BD%BF%E7%94%A8fork()%E5%88%9B%E5%BB%BA%E5%AD%90%E8%BF%9B%E7%A8%8B'><span>4.使用fork()创建子进程</span></a></p><p><a href='#%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%811'><span>测试代码1</span></a></p><p><a href='#%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%812'><span>测试代码2</span></a></p><p><a href='#5.%E5%9B%9E%E7%AD%94%E4%B8%8Efork()%E6%9C%89%E5%85%B3%E7%9A%845%E4%B8%AA%E9%97%AE%E9%A2%98'><span>5.回答与fork()有关的5个问题</span></a></p><p><a href='#6.fork()%E6%98%AF%E6%80%8E%E4%B9%88%E5%88%9B%E5%BB%BA%E5%AD%90%E8%BF%9B%E7%A8%8B%E7%9A%84%3F'><span>6.简单理解fork()是怎么创建子进程的?</span></a></p><p><a href='#%E7%88%B6%E5%AD%90%E8%BF%9B%E7%A8%8B%E7%9A%84%E4%BB%A3%E7%A0%81%E6%AE%B5%E5%88%86%E6%9E%90%C2%A0'><span>父子进程的代码段分析</span></a></p><p><a href='#%E7%88%B6%E5%AD%90%E8%BF%9B%E7%A8%8B%E7%9A%84%E6%95%B0%E6%8D%AE%E6%AE%B5%E5%88%86%E6%9E%90'><span>父子进程的数据段分析</span></a></p><p><a href='#%E7%BB%93%E8%AE%BA'><span>结论</span></a></p><p><a href='#7.%E4%BD%BF%E7%94%A8vfork()%E5%88%9B%E5%BB%BA%E5%AD%90%E8%BF%9B%E7%A8%8B'><span>7.使用vfork()创建子进程</span></a></p><p><a href='#vfork()%E4%B8%8Efork()%E7%9A%84%E5%8C%BA%E5%88%AB'><span>vfork()与fork()的区别</span></a></p><p><a href='#7.%E6%80%BB%E7%BB%93%3A%E5%88%9B%E5%BB%BA%E8%BF%9B%E7%A8%8B%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95'><span>8.总结:创建进程的两种方法</span></a></p><p><a href='#9.%E7%BB%83%E4%B9%A0%E9%A2%98'><span>9.练习题</span></a></p><hr /><p><span>承接</span><a href='https://zhangcoder.blog.csdn.net/article/details/149281546?spm=1011.2415.3001.5331'><span>OS17.【Linux】进程基础知识(1)</span></a><span>文章,继续讲解进程的基础知识</span></p><h1 id='1ps-ajx命令是如何获取pid的'><span>1.ps ajx命令是如何获取PID的</span></h1><p><span>一般情况下,进程的PCB是通过</span><strong><span>双向链表</span></strong><span>连接起来的,PCB中含有指向该进程的代码段和数据段</span></p><p><span>的指针,如下图所示:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643338530-d3bbd6fe-8a35-4f3d-9aa1-3e87ccead33e.png" referrerpolicy="no-referrer"></p><p><span>进程由操作系统管控,那么ps ajx</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>只能通过系统调用</span></font></strong><span>接口来遍历这个双向链表,由于PCB中存储着进程的PID,那么ps ajx就能获取进程的各个信息,之后打印到显示器上</span></p><h1 id='2实验编写代码通过系统调用来获取pid'><span>2.</span><strong><span>实验:编写代码,通过系统调用来获取PI*</span></strong><span>*D**</span></h1><p><span>手册中对getpid()函数的描述:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643338628-ddb590ab-62c6-425e-af5e-b0712d408331.png" referrerpolicy="no-referrer"></p><p><span>(注:查系统调用一定要查2号手册) </span></p><p><span>作用:返回调用进程的PID</span></p><p><span>返回类型:pid_t</span></p><p><span>需要包含两个头文件: </span><font style="color:#1a439c;background-color:#eaf4fc;"><span>&lt;sys/types.h&gt;和&lt;unistd.h&gt;</span></font></p><h2 id='pidt类型的本质'><span>pid_t类型的本质</span></h2><p><span>有几种方法</span></p><p><span>1.GNU官网</span><a href='https://www.gnu.org/software/libc/manual/html_node/Process-Identification.html'><span>www.gnu.org Process-Identification</span></a><span>对pid_t的解释</span></p><p><em><span>Data Type: __</span><strong><span>pid_t</span></strong></em></p><p><em><span>The _</span><code>_pid_t_</code></em><span> data type is a </span><strong><strong><span>signed integer type</span></strong></strong><span>(有符号整型) which is capable of representing a process ID. In the GNU C Library, this is an </span><em><code>_int_</code></em><span>._</span></p><p><span>2.也可以使用C++的typeid来打印pid_t的类型</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;iostream&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;typeinfo&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;sys/types.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">using</span> <span class="cm-keyword">namespace</span> <span class="cm-def">std</span>; </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable-3">int</span> <span class="cm-def">main</span>() </span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">pid_t</span> <span class="cm-variable">id</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-variable">cout</span> <span class="cm-operator">&lt;&lt;</span> <span class="cm-string">"Type of pid_t: "</span> <span class="cm-operator">&lt;&lt;</span> <span class="cm-keyword">typeid</span>(<span class="cm-variable">id</span>).<span class="cm-variable">name</span>() <span class="cm-operator">&lt;&lt;</span> <span class="cm-variable">endl</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-keyword">return</span> <span class="cm-number">0</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 230px;"></div><div class="CodeMirror-gutters" style="height: 230px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>运行结果:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643338535-53ce1243-9caa-4295-a6c9-451742e24138.png" referrerpolicy="no-referrer"></p><p><span>3.使用man命令</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="bash"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">man <span class="cm-number">7</span> pid_t</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 23px;"></div><div class="CodeMirror-gutters" style="height: 23px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>(7号手册内容是系统数据类型)</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643338532-9b09923f-ffaa-47bf-9961-98d33ba3ed70.png" referrerpolicy="no-referrer"></p><p><span>也提到了是int类型</span></p><p><span>4.其实pid_t也是被重定义的</span></p><p><span>阅读linux内核源代码</span><font style="color:#1a439c;background-color:#eaf4fc;"><span>/usr/include/sys/type.h</span></font><span>下有说明:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#ifndef __pid_t_defined</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-keyword">typedef</span> <span class="cm-variable">__pid_t</span> <span class="cm-variable">pid_t</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta"># define __pid_t_defined</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#endif</span></span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 92px;"></div><div class="CodeMirror-gutters" style="height: 92px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>结论: 可以用%d打印pid_t类型</span></font></strong></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;stdio.h&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;sys/types.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;unistd.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable-3">int</span> <span class="cm-def">main</span>()</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">printf</span>(<span class="cm-string">"The process's PID is %d"</span>,<span class="cm-variable">getpid</span>());</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">getchar</span>();<span class="cm-comment">//防止进程退出</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">return</span> <span class="cm-number">0</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 207px;"></div><div class="CodeMirror-gutters" style="height: 207px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>运行结果:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339334-e70223ad-123b-445d-aaf5-50b290c02a0e.png" referrerpolicy="no-referrer"></p><h2 id='strace命令'><span>strace命令</span></h2><p><span>作用:跟踪系统调用和信号</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339133-bb1997b2-f754-4b12-be80-d94db0bba403.png" referrerpolicy="no-referrer"></p><p><span>例如查看上方代码生成的可执行程序的系统调用:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339701-28b58431-0358-41b7-b245-5ac7e9e87d72.png" referrerpolicy="no-referrer"></p><p><span>往下翻可以看到getpid()</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339340-37b070e4-3f5c-43da-b346-1cbd5ea3167c.png" referrerpolicy="no-referrer"></p><h1 id='3ppid'><strong><span>3.PPID</span></strong></h1><h2 id='父进程和子进程'><span>父进程和子进程</span></h2><p><span>从名称上来看,父进程创建子进程,所以父子进程是相对的</span></p><h2 id='ppid'><span>PPID</span></h2><p><span>PPID的全称是Parent Process ID,即父进程的PID</span></p><p><span>可以使用getppid()函数来获取PPID:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339279-20aa006a-902e-481f-ac70-d38057ff7689.png" referrerpolicy="no-referrer"></p><p><span>作用:返回调用进程的父进程的PID</span></p><p><span>返回类型:pid_t</span></p><p><span>需要包含两个头文件: </span><font style="color:#1a439c;background-color:#eaf4fc;"><span>&lt;sys/types.h&gt;和&lt;unistd.h&gt;</span></font></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;stdio.h&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;sys/types.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;unistd.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable-3">int</span> <span class="cm-def">main</span>()</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-variable">printf</span>(<span class="cm-string">"The process's PID is %d,PPID is %d\n"</span>,<span class="cm-variable">getpid</span>(),<span class="cm-variable">getppid</span>());</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp; &nbsp; &nbsp;<span class="cm-keyword">return</span> <span class="cm-number">0</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 184px;"></div><div class="CodeMirror-gutters" style="height: 184px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>运行结果:</span></p><p><span>第一次运行:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339616-0c1712ca-71ea-4648-819d-cc261669bc10.png" referrerpolicy="no-referrer"></p><p><span>第二次运行:</span><br/><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643339796-3d643979-6209-48d6-b401-90c774a13d4f.png" referrerpolicy="no-referrer"></p><p><span>第三次运行:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340008-95398dea-f287-4a1a-b391-3d16a766dc65.png" referrerpolicy="no-referrer"></p><p><span>发现:PID一直在变,但PPID没有变</span></p><p><span>查看PID为23811是哪个进程:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340111-39740d4f-51c5-4dc4-98a3-7b95d2d7ec18.png" referrerpolicy="no-referrer"></p><p><span>为</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>bash命令行解释器进程</span></font></strong><span>,是合情合理的,因为bash作为父进程,</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>通过./a.out来创建子进程</span></font></strong></p><p><span>如果重新连一下服务器,再查bash进程的PID:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="bash"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-builtin">ps</span> ajx | head <span class="cm-attribute">-1</span> &amp;&amp; <span class="cm-builtin">ps</span> ajx | <span class="cm-builtin">grep</span> <span class="cm-string">"bash"</span></span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 23px;"></div><div class="CodeMirror-gutters" style="height: 23px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340249-3621a2e7-b1ed-4a9f-8f20-b49bbef1f489.png" referrerpolicy="no-referrer"></p><p><span>会发现PID变了</span></p><h2 id='结论'><span>结论</span></h2><p><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>1.bash作为父进程,通过./a.out来创建子进程 </span></font></strong></p><p><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>2.连接远程服务器会创建bash进程</span></font></strong></p><h1 id='4使用fork创建子进程'><span>4.使用fork()创建子进程</span></h1><p><span>查下手册中对fork()的描述:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340321-f3c6a430-3644-4e0c-8f32-e74e3c81e7ae.png" referrerpolicy="no-referrer"></p><p><span>作用:</span></p><p><span>_fork() creates a new process by duplicating(复制) the calling process.  The new process is referred to as the child process.  The calling process is referred to as the parent process. _</span></p><p><span>通过</span><strong><span>复制</span></strong><span>调用的进程来创建新进程,新进程指的是子进程,调用的进程指的是父进程</span></p><p><span>返回类型:pid_t</span></p><p><span>需要包含两个头文件: </span><font style="color:#1a439c;background-color:#eaf4fc;"><span>&lt;sys/types.h&gt;和&lt;unistd.h&gt;</span></font></p><p><span>返回值:</span><em><span>On success, the PID of the child process is returned in the parent, and 0 is returned in the child.  On failure, -1 is returned in the parent, no child process is created, and errno is set  appropriately.</span></em></p><p><span>会发现fork()如果成功创建子进程,会返回</span><strong><span>两个返回值,*</span></strong><span>*</span><font style="color:#fe2c24;background-color:#fef2f0;"><span>父进程得到的返回值是子进程的PID,子进程的得到的返回值是0</span></font><strong></strong><span>,**这和以前C语言中将的函数的返回值只有一个是不一样的</span></p><p><span>fork()如果无法创建子进程,</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>父进程得到的返回值是-1,errno 会被设置为相应的错误码</span></font></strong></p><h2 id='测试代码1'><span>测试代码1</span></h2><p><span>既然说fork()如果成功创建子进程,会返回两个返回值,那就根据这个特点写一个父子进程分流的代码:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp" style="break-inside: unset;"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><div class="CodeMirror-gutter-wrapper CodeMirror-activeline-gutter" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;stdio.h&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;sys/types.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-meta">#include &lt;unistd.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable-3">int</span> <span class="cm-def">main</span>()</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">printf</span>(<span class="cm-string">"该进程的PID为%d,PPID为%d\n"</span>,<span class="cm-variable">getpid</span>(),<span class="cm-variable">getppid</span>());</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">pid_t</span> <span class="cm-variable">ret_id</span><span class="cm-operator">=</span><span class="cm-variable">fork</span>();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">if</span> (<span class="cm-variable">ret_id</span><span class="cm-operator">==</span><span class="cm-number">0</span>)</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">while</span>(<span class="cm-number">1</span>)</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">printf</span>(<span class="cm-string">"子进程正在运行,PID为%d,PPID为%d\n"</span>,<span class="cm-variable">getpid</span>(),<span class="cm-variable">getppid</span>());<span class="cm-tab" role="presentation" cm-text="	">  </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">sleep</span>(<span class="cm-number">3</span>); </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>}<span class="cm-tab" role="presentation" cm-text="	">   </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>} </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">else</span> <span class="cm-keyword">if</span> (<span class="cm-variable">ret_id</span><span class="cm-operator">&gt;</span><span class="cm-number">0</span>)</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">while</span>(<span class="cm-number">1</span>)</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" class="cm-tab-wrap-hack" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">printf</span>(<span class="cm-string">"父进程正在运行,PID为%d,PPID为%d\n"</span>,<span class="cm-variable">getpid</span>(),<span class="cm-variable">getppid</span>());<span class="cm-tab" role="presentation" cm-text="	">  </span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">sleep</span>(<span class="cm-number">3</span>); </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span>}<span class="cm-tab" role="presentation" cm-text="	">   </span> </span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">else</span></span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-variable">printf</span>(<span class="cm-string">"error!"</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span>}</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-tab" role="presentation" cm-text="	">    </span><span class="cm-keyword">return</span> <span class="cm-number">0</span>;</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 691px;"></div><div class="CodeMirror-gutters" style="height: 691px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>运行结果:</span></p><p><span>会发现两个死循环都在运行,显然分为两个执行流</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/gif/47321177/1763643340427-dad16309-fadc-4d6b-ac03-32450f9eec33.gif" referrerpolicy="no-referrer"></p><p><span>分析两个执行流:</span></p><p><span>1.父进程的PID是子进程的PPID</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340604-6c54d245-019d-45dd-a9d5-9f2cf88eefe6.png" referrerpolicy="no-referrer"></p><p><span>2.执行流程</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340709-5bbcef86-917a-4ab5-a17e-0febff5a188e.png" referrerpolicy="no-referrer"></p><p><span>父子进程会分流 </span></p><p><span>3.父子进程的执行顺序</span></p><p><span>父子进程执行顺序是随机的,由进程调度所决定的</span></p><h2 id='测试代码2'><span>测试代码2</span></h2><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="bash"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">#include &lt;stdio.h&gt;</span></span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">#include &lt;sys/types.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-comment">#include &lt;unistd.h&gt;</span></span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">int main()</span></pre><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  printf(<span class="cm-string">"teststring1\n"</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  fork();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp;  printf(<span class="cm-string">"teststring2\n"</span>);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; &nbsp;<span class="cm-builtin">sleep</span>(3);</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 230px;"></div><div class="CodeMirror-gutters" style="height: 230px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>运行结果:</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/gif/47321177/1763643340771-696ea8d1-60c3-4fef-9f25-016016915cb1.gif" referrerpolicy="no-referrer"></p><p><span>现象:</span></p><p><span>1.teststring1打印了一次,但teststring2打印了两次</span></p><p><span>2.打印teststring1一次,teststring2两次后停顿3s后退出</span></p><p><span>分析:</span></p><p><span>根据测试代码1提到的分流原则,有:</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>父进程从printf(&quot;teststring1\n&quot;)执行,子进程从fork()后的printf(&quot;teststring2\n&quot;)开始执行,最后父子进程都sleep(3),近似同时退出</span></font></strong><span>(发现父子进程的代码是共享的这个后面会再次提到) </span></p><h1 id='5回答与fork有关的5个问题'><span>5.回答与fork()有关的5个问题</span></h1><p><span>1.为什么fork()成功创建子进程后,要给父子进程返回不同的值?</span></p><p><span>内核开发者设计创建子进程函数的目的:</span><strong><span>让子进程执行和父进程不同的代码,*</span></strong><span>*</span><font style="color:#fe2c24;background-color:#fef2f0;"><span>可以根据父子进程的得到访返回值的不同,采用if-else分流父子进程</span></font><span>**</span></p><p><span>2.fork()成功创建子进程后为什么要给父进程返回子进程的PID?</span></p><p><span>一个父进程可以有</span><strong><span>多个</span></strong><span>子进程,由于每个进程的PID是独一无二的,因此fork()给父进程返回子进程的PID是</span><strong><span>为了区分不同的子进程</span></strong></p><p><span>反过来,一个子进程只能有一个父进程 </span></p><p><span>3.fork()成功创建子进程后为什么要给子进程返回0?</span></p><p><span>一个子进程只会有一个父进程,</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>PID==0总是由内核交换进程使用</span></font></strong><span>,所以一个子进程的PID不可能为0</span></p><p><span>4.fork()是如何做到返回两次值的?</span></p><p><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>一般而言父子进程的代码是共享的</span></font></strong><span>,那么父子进程各执行一次fork()里面的return,因此return两次</span></p><p><span>而且代码段是不能被修改的,具体的原因和保护模式有关,这里不介绍</span></p><p><span>而且保护模式下的代码段只定义了这三个属性:accessed (访问,A), read enable (可读,R), and</span><br/><span>conforming (一致,C).</span></p><p><img src="https://cdn.nlark.com/yuque/0/2025/png/47321177/1763643340867-8e07f873-99e9-49ce-8bde-8f163d89c576.png" referrerpolicy="no-referrer"></p><p><span>(来自Intel® 64 and IA-32 Architectures Software Developers Manual, Volume 3A: System Programming Guide, Part 1) </span></p><p><span>而且在保护模式下操作系统对内存是分段管理的,每个段的属性存储在段描述符中,Intel手册中给出了详细内容:</span></p><p><img src="data:image;base64,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0+rVN0+Ozv/22Rvnp+effvvd4+Pjiz+8X5ydnX9///47l60+fvjoy9mZrY+j4rNPfjw7Ob08KV69/1IrF97cOTk/bfXxqG3UiHYPb96cnR4x27SvZWuItZhO3/n7t2e8laSaSLwddSS+1b46Ffrg77JqytHF0dHJuqcIVmS472MtfSxsi6i+D60L1egXfR+Lewr5zDJWzKhy1tQH/dpYfdhnKDpA7zznedvQx7PO6eP446//9oD9/+jt786Pi1+9fsb+qN7m+vgd++Powb2fPjg5fvBJXf3j7hHVx9HZ3//56Pj711+7X/zfT/e+/OPZ+ft/+tPPX370l2/PHv3uwcN36uojJofzD157/6fqy+Lo5Ps/nD/86aPq5fbd409f/92r1W9e5hu89/tXq/uslXLy8A9/fFi9ccz2/e3vXr/78Y9MHycvv53Ub9w9bdtEyem9P+46yw6WqfWhRl507UM3+hdOG1Pw8Ykbu9GHHHnpn+Gt2/r1tdTH4//vXd79cP7T7Oz44/vvPjg5at9t7/VKH23F44PfnLf6ePfTH/94SfVx/MEXd48//OJfv378wW8fn3//w+XJu3V97/vvvvn09NF7r/3z9X/c/dW7x0fnP//lj9+++sH935+dPPr2tey113986d3j47v//m72j3frV09aUfzt8+T1b798qdXDS5+//9JPP/6nOjo6feub1/7zn7vvfn7pnfzxq9e+bbd9+fjk0ZtvfpXtOssOlqn10Zv3QQ64ymjDi0+qeRSaJ8bp4wlvTX3I/uOhMxTdN89dz8bLSf1b2ftweup5xZ+/rF65ODtlftD68E4ffnXZ6uPly3vv1SdEHyc///7s9F//+vj09KfPLo9f+aZoGy/HJy//9j9t4+VvX1dnZw/+/P7Z8bv//PL85OTi089eOXn0p8/ute++97fzk398/f3p6fndH9pm0f3/vndxWjz8+yvHj/79qwen548e/u7iuPrvny9OLr7/KLg8vhe8eXFyWtz9zeXJ93/84dsHu86yg2VYH2t1nS5WwIb6eIon6Lkn7QlVy7pO5dvdr62lD1VvGjxD9SzP7evXdXp09h7tnDx+I/nT71/98Y1HBal9eCePf1swfZy88vidj4+1Po7Of/jotPjlo2Pv5E+/Oj1++DXb0VHxxc9theHR1++03z396JML7+TshPVdPPrh7umjL2at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" referrerpolicy="no-referrer"></p><p>&nbsp;</p><p><span>代码段不可修改也和DPL(</span><strong><span>D</span></strong><span>escriptor </span><strong><span>P</span></strong><span>rivilege </span><strong><span>L</span></strong><span>evel)有关,其控制对段的访问</span></p><p><img src="data:image;base64,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" referrerpolicy="no-referrer"></p><p><span>5.对于pid_t ret_id=fork(),变量ret_id为什么会有两个不同的值?</span></p><p><span>暂且不回答,在进程地址空间会提到原因</span></p><h1 id='6简单理解fork是怎么创建子进程的'><span>6.简单理解fork()是怎么创建子进程的?</span></h1><p><span>会议进程的组成,对于子进程,有以下公式:</span></p><p><strong><span>子进程=子进程的PCB+子进程的代码段和数据段</span></strong></p><h2 id='父子进程的代码段分析'><span>父子进程的代码段分析 </span></h2><p><span>因此fork()创建子进程会创建子进程的task_struct,并向task_struct写入数据</span></p><p><span>上面提到了,</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>父子进程的代码段是共享的</span></font></strong><span>,因此子进程的task_struct的执行代码段的指针指向父进程的代码段</span></p><p><span>这样父子进程都有独立(即</span><strong><span>隔离</span></strong><span>)的task_struct,可以被CPU调度执行了</span></p><p><span>注:任何平台的进程之间都是独立的,具体和保护模式有关</span></p><h2 id='父子进程的数据段分析'><span>父子进程的数据段分析</span></h2><p><span>数据段可读可写,一开始(</span><strong><span>子进程刚刚创建时</span></strong><span>),父子进程的数据段是共享的,当子进程需要修改数据段中的内容时会发生</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>写时拷贝</span></font></strong><span>(在文章</span><a href='https://zhangcoder.blog.csdn.net/article/details/148057214?spm=1011.2415.3001.5331'><span>CD40.【C++ Dev】string类的模拟实现(4)(operator=、拷贝构造函数的现代写法、写时拷贝的简单了解)</span></a><span>提到过),</span><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>操作系统会拷贝那一部分数据供子进程修改,保证父进程的数据不受影响</span></font></strong></p><p><span>例如子进程的pid_t肯定要写时拷贝 </span></p><p><img src="data:image;base64,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" referrerpolicy="no-referrer"></p><p><span>注意:没有必要将父进程数据段的所有内容拷贝一份给子进程,因为这子进程可能只会使用一部分数据,导致内存资源被浪费</span></p><h1 id='结论-2'><span>结论</span></h1><p><strong><font style="color:#fe2c24;background-color:#fef2f0;"><span>结论: 用fork()创建子进程时,父子进程共用同一份代码,数据以写时拷贝的方式各自私有</span></font></strong></p><h1 id='7使用vfork创建子进程'><span>7.使用vfork()创建子进程</span></h1><p><span>作用: 创建子进程并阻塞(block)父进程</span></p><p><span>使用前包含&lt;unistd.h&gt;头文件</span></p><h3 id='vfork与fork的区别'><span>vfork()与fork()的区别</span></h3><p><span>1.vfork直接使用父进程存储空间,不用拷贝</span></p><p><span>2.vfork保证子进程先运行,当子进程调用exit退出后,父进程才执行(之前父进程被阻塞了)</span></p><h1 id='8总结创建进程的两种方法'><span>8.总结:创建进程的两种方法</span></h1><p><span>方法1.通过bash执行可执行文件(指令级别),其实bash也是通过fork()来创建子进程的</span></p><p><span>方法2.使用fork()或vfork()创建子进程(代码级别)</span></p><h1 id='9练习题'><span>9.练习题</span></h1><p><span>不算main 这个进程自身,到底创建了多少个进程?</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="cpp"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="cpp"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation" style=""><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"><span class="cm-variable-3">int</span> <span class="cm-def">main</span>(<span class="cm-variable-3">int</span> <span class="cm-variable">argc</span>, <span class="cm-variable-3">char*</span> <span class="cm-variable">argv</span>[])</span></pre></div><div style="position: relative;"><div class="CodeMirror-gutter-wrapper" style="left: -11px;"><div class="CodeMirror-gutter-elt" style="left: 0px; width: 10px;"><div class="CodeMirror-foldgutter-open CodeMirror-guttermarker-subtle"></div></div></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">{</span></pre></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; <span class="cm-variable">fork</span>();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; <span class="cm-variable">fork</span>() <span class="cm-operator">&amp;&amp;</span> <span class="cm-variable">fork</span>() <span class="cm-operator">||</span> <span class="cm-variable">fork</span>();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;"> &nbsp; <span class="cm-variable">fork</span>();</span></pre><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">}</span></pre></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 138px;"></div><div class="CodeMirror-gutters" style="height: 138px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><span>分析:</span></p><p><span>注意&amp;&amp;和||短路运算的特点,如果记不得的话可以反汇编ELF文件看看编译器是怎么处理的:</span></p><pre class="md-fences md-end-block ty-contain-cm modeLoaded" spellcheck="false" lang="bash"><div class="CodeMirror cm-s-inner cm-s-null-scroll CodeMirror-wrap" lang="bash"><div style="overflow: hidden; position: relative; width: 3px; height: 0px; top: 9.51875px; left: 19px;"><textarea autocorrect="off" autocapitalize="off" spellcheck="false" tabindex="0" style="position: absolute; bottom: -1em; padding: 0px; width: 1000px; height: 1em; outline: none;"></textarea></div><div class="CodeMirror-scrollbar-filler" cm-not-content="true"></div><div class="CodeMirror-gutter-filler" cm-not-content="true"></div><div class="CodeMirror-scroll" tabindex="-1"><div class="CodeMirror-sizer" style="margin-left: 11px; margin-bottom: 0px; border-right-width: 0px; padding-right: 0px; padding-bottom: 0px;"><div style="position: relative; top: 0px;"><div class="CodeMirror-lines" role="presentation"><div role="presentation" style="position: relative; outline: none;"><div class="CodeMirror-measure"><pre><span>xxxxxxxxxx</span></pre></div><div class="CodeMirror-measure"></div><div style="position: relative; z-index: 1;"></div><div class="CodeMirror-code" role="presentation"><div class="CodeMirror-activeline" style="position: relative;"><div class="CodeMirror-activeline-background CodeMirror-linebackground"></div><div class="CodeMirror-gutter-background CodeMirror-activeline-gutter" style="left: -11px; width: 11px;"></div><pre class=" CodeMirror-line " role="presentation"><span role="presentation" style="padding-right: 0.1px;">objdump <span class="cm-attribute">-d</span> a.out</span></pre></div></div></div></div></div></div><div style="position: absolute; height: 0px; width: 1px; border-bottom: 0px solid transparent; top: 23px;"></div><div class="CodeMirror-gutters" style="height: 23px; left: 0px;"><div class="CodeMirror-gutter CodeMirror-foldgutter"></div></div></div></div></pre><p><img src="data:image;base64,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" referrerpolicy="no-referrer"></p><p><span>test %eax,%eax是检查fork()的返回值是否为0,如果为0,则设置标志位ZF=1,如果不为0,则设置标志位ZF=0</span></p><p><span>test指令内部逻辑:</span></p><p><span>Intel开发手册是这样说明的:</span></p><figure class='table-figure'><table><thead><tr><th style='text-align:center;' ><strong><span>Opcode</span></strong></th><th style='text-align:center;' ><strong><span>Instruction</span></strong></th><th style='text-align:center;' ><strong><span>Op/</span></strong><span>			</span><span>En</span></th><th style='text-align:center;' ><strong><span>64-Bit</span></strong><span>			</span><span>Mode</span></th><th style='text-align:center;' ><strong><span>Compat/</span></strong><span>			</span><span>Leg Mode</span></th><th style='text-align:center;' ><strong><span>Description</span></strong></th></tr></thead><tbody><tr><td style='text-align:center;' ><span>85 /r</span></td><td style='text-align:center;' ><span>TEST r/m32, r32</span></td><td style='text-align:center;' ><span>MR</span></td><td style='text-align:center;' ><span>Valid</span></td><td style='text-align:center;' ><span>Valid</span></td><td style='text-align:center;' ><span>AND r32 with r/m32; set SF, ZF, PF according to result.</span></td></tr></tbody></table></figure><p><span>那么test %eax,%eax会将eax寄存器的值和自己进行</span><strong><span>与</span></strong><span>运算,计算的结果用于设置ZF,不修改eax寄存器的值</span></p><p><span>答案是19</span></p><p>&nbsp;</p></div></div>
</body>
</html>